***************** Replication of Franchino, Fabio, and Camilla Mariotto. “Bargaining Outcomes and Success in EU Economic Governance Reforms”. Political Science Research and Methods.

* Step 1 to reproduce Figure 2

version 16

******************************* SENSITIVITY ANALYSIS  - Add Gaussian random noise to positions
*************   COMPUTING POINT PREDICTIONS: NBS - RP Nash bargaining solution without reference point
clear all
set obs 1
gen v = _n/10
save mad_NBSnorp_noise.dta, replace

set seed 1234

local m =  1  /* iteration per each s.d. value */
while `m' <= 1000 {

local v = 0.1  /* v is s.d of Gaussian noise - s.d. of country and institutional positions is 41.74882 */
while `v' <= 42.1 {
* Upload original dataset
use NBSmodel_data.dta, clear
gen v = `v'
gen nbs = 0
gen utility_star = .
gen utility = .
order utility utility_star nbs

* Add Gaussian noise N(0,v) to Commission positions
generate random = rnormal(0,`v')
replace comm=comm+random
replace comm=100 if comm>100 
replace comm=0   if comm<0 

* Add Gaussian noise N(0,v) to Parliament positions
replace random = rnormal(0,`v')
replace ep_1=ep_1+random
replace ep_1=100 if ep_1>100 
replace ep_1=0   if ep_1<0 

* Add Gaussian noise N(0,v) to country positions
local j = 1
while `j' <= 27 {
replace random = rnormal(0,`v')
replace country`j'=country`j'+random if country`j'!=.
replace country`j'=100 if country`j'>100 
replace country`j'=0   if country`j'<0 
local j = `j' + 1
}

* Gradient ascent procedure
local i = 0
while `i' <= 100 {
replace utility =	-	salience1	*(`i'-	country1	)^2 if	salience1	> 0 &	salience1	!= .
replace utility = utility + (	-	salience2	*(`i'-	country2	)^2) if	salience2	> 0 &	salience2	!= .
replace utility = utility + (	-	salience3	*(`i'-	country3	)^2) if	salience3	> 0 &	salience3	!= .
replace utility = utility + (	-	salience4	*(`i'-	country4	)^2) if	salience4	> 0 &	salience4	!= .
replace utility = utility + (	-	salience5	*(`i'-	country5	)^2) if	salience5	> 0 &	salience5	!= .
replace utility = utility + (	-	salience6	*(`i'-	country6	)^2) if	salience6	> 0 &	salience6	!= .
replace utility = utility + (	-	salience7	*(`i'-	country7	)^2) if	salience7	> 0 &	salience7	!= .
replace utility = utility + (	-	salience8	*(`i'-	country8	)^2) if	salience8	> 0 &	salience8	!= .
replace utility = utility + (	-	salience9	*(`i'-	country9	)^2) if	salience9	> 0 &	salience9	!= .
replace utility = utility + (	-	salience10	*(`i'-	country10	)^2) if	salience10	> 0 &	salience10	!= .
replace utility = utility + (	-	salience11	*(`i'-	country11	)^2) if	salience11	> 0 &	salience11	!= .
replace utility = utility + (	-	salience12	*(`i'-	country12	)^2) if	salience12	> 0 &	salience12	!= .
replace utility = utility + (	-	salience13	*(`i'-	country13	)^2) if	salience13	> 0 &	salience13	!= .
replace utility = utility + (	-	salience14	*(`i'-	country14	)^2) if	salience14	> 0 &	salience14	!= .
replace utility = utility + (	-	salience15	*(`i'-	country15	)^2) if	salience15	> 0 &	salience15	!= .
replace utility = utility + (	-	salience16	*(`i'-	country16	)^2) if	salience16	> 0 &	salience16	!= .
replace utility = utility + (	-	salience17	*(`i'-	country17	)^2) if	salience17	> 0 &	salience17	!= .
replace utility = utility + (	-	salience18	*(`i'-	country18	)^2) if	salience18	> 0 &	salience18	!= .
replace utility = utility + (	-	salience19	*(`i'-	country19	)^2) if	salience19	> 0 &	salience19	!= .
replace utility = utility + (	-	salience20	*(`i'-	country20	)^2) if	salience20	> 0 &	salience20	!= .
replace utility = utility + (	-	salience21	*(`i'-	country21	)^2) if	salience21	> 0 &	salience21	!= .
replace utility = utility + (	-	salience22	*(`i'-	country22	)^2) if	salience22	> 0 &	salience22	!= .
replace utility = utility + (	-	salience23	*(`i'-	country23	)^2) if	salience23	> 0 &	salience23	!= .
replace utility = utility + (	-	salience24	*(`i'-	country24	)^2) if	salience24	> 0 &	salience24	!= .
replace utility = utility + (	-	salience25	*(`i'-	country25	)^2) if	salience25	> 0 &	salience25	!= .
replace utility = utility + (	-	salience26	*(`i'-	country26	)^2) if	salience26	> 0 &	salience26	!= .
replace utility = utility + (	-	salience27	*(`i'-	country27	)^2) if	salience27	> 0 &	salience27	!= .

* comm and ep positions (exclude if we want only country positions)
replace utility = utility + (	-	salience_comm	*(`i'-	comm	)^2)
replace utility = utility + (	-	salience_ep	*(`i'-	ep_1	)^2) if	ep_rule==2

replace utility_star = utility if `i'==0
replace nbs = `i' if utility > utility_star
replace utility_star = utility if utility > utility_star

local i = `i' + 1
}

order utility utility_star nbs sq outcome
sort act issue_id
label variable nbs "nash bargaining solution, without reference point"
label variable utility_star "maximized product of actors' utilities" 

* Compute means of absolute differences between outcomes and model predictions
gen mad`m'=abs(nbs-outcome)
collapse v mad`m'
label variable mad`m' "mean of absolute differences" 
label variable v "s.d of Gaussian noise" 

merge 1:1 v using mad_NBSnorp_noise.dta, nogen
save mad_NBSnorp_noise.dta, replace
sort v
pause 1000

       
local v = `v' + 1 /* increments of s.d. */
}

local m = `m' + 1 /* simulations */
}

egen NBSnorp = rowmean(mad*)
label variable NBSnorp "mean of absolute differences across m simulations" 
egen NBSnorp_u = rowpctile(mad*), p(97.5)
label variable NBSnorp_u "upper boundary" 
egen NBSnorp_l = rowpctile(mad*), p(2.5)
label variable NBSnorp_l "lower boundary" 

drop mad*
save mad_NBSnorp_noise.dta, replace

exit

